using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class book : MonoBehaviour
{
    // 定义一个序列化字段，表示页面的速度
    [SerializeField] float pageSpeed = 0.5f;
    // 定义一个序列化字段，表示页面的列表
    [SerializeField] List<Transform> pages;
    // 定义一个索引，初始值为-1
    int index = -1;
    // 定义一个布尔值，表示是否旋转，初始值为false
    bool rotate = false;
    // 定义一个序列化字段，表示后退按钮
    [SerializeField] GameObject backButton;
    // 定义一个序列化字段，表示前进按钮
    [SerializeField] GameObject forwardButton;

    private void Start()
    {
        InitialState();
    }

    // 定义InitialState方法，用于初始化状态
    public void InitialState()
    {
        // 遍历页面列表，将每个页面的旋转设置为初始状态
        for (int i=0; i<pages.Count; i++)
        {
            pages[i].transform.rotation=Quaternion.identity;
        }
        // 将第一个页面设置为最后一个子对象
        pages[0].SetAsLastSibling();
        // 将后退按钮设置为不活动状态
        backButton.SetActive(false);

    }

    // 定义RotateForward方法，用于向前旋转页面
    public void RotateForward()
    {
        // 如果正在旋转，则返回
        if (rotate == true) { return; }
        // 索引加1
        index++;
        // 定义一个角度，用于向前旋转页面
        float angle = 180; //为了向前旋转页面，需要将旋转设置为绕y轴旋转180度
        // 调用ForwardButtonActions方法
        ForwardButtonActions();
        // 将当前页面设置为最后一个子对象
        pages[index].SetAsLastSibling();
        // 开始协程，进行旋转
        StartCoroutine(Rotate(angle, true));

    }

    // 定义ForwardButtonActions方法，用于处理前进按钮的行为
    public void ForwardButtonActions()
    {
        // 如果后退按钮不活动，则激活后退按钮
        if (backButton.activeInHierarchy == false)
        {
            backButton.SetActive(true); //每次向前翻页时，应激活后退按钮
        }
        // 如果当前页面是最后一个页面，则关闭前进按钮
        if (index == pages.Count - 1)
        {
            forwardButton.SetActive(false); //如果页面是最后一个，则关闭前进按钮
        }
    }

    // 定义RotateBack方法，用于向后旋转页面
    public void RotateBack()
    {
        // 如果正在旋转，则返回
        if (rotate == true) { return; }
        // 定义一个角度，用于向后旋转页面
        float angle = 0; //为了向后旋转页面，需要将旋转设置为绕y轴旋转0度
        // 将当前页面设置为最后一个子对象
        pages[index].SetAsLastSibling();
        // 调用BackButtonActions方法
        BackButtonActions();
        // 开始协程，进行旋转
        StartCoroutine(Rotate(angle, false));
    }

    // 定义BackButtonActions方法，用于处理后退按钮的行为
    public void BackButtonActions()
    {
        // 如果前进按钮不活动，则激活前进按钮
        if (forwardButton.activeInHierarchy == false)
        {
            forwardButton.SetActive(true); //每次向后翻页时，应激活前进按钮
        }
        // 如果当前页面是第一个页面，则关闭后退按钮
        if (index - 1 == -1)
        {
            backButton.SetActive(false); //如果页面是第一个，则关闭后退按钮
        }
    }

    // 定义一个协程，用于旋转页面
    IEnumerator Rotate(float angle, bool forward)
    {
        float value = 0f;
        while (true)
        {
            // 设置旋转为true
            rotate = true;
            // 定义目标旋转
            Quaternion targetRotation = Quaternion.Euler(0, angle, 0);
            // 增加value的值
            value += Time.deltaTime * pageSpeed;
            // 平滑地旋转页面
            pages[index].rotation = Quaternion.Slerp(pages[index].rotation, targetRotation, value); //平滑地旋转页面
            // 计算给定旋转角度和当前旋转角度之间的角度
            float angle1 = Quaternion.Angle(pages[index].rotation, targetRotation); //计算给定旋转角度和当前旋转角度之间的角度
            // 如果角度小于0.1f，则停止旋转
            if (angle1 < 0.1f)
            {
                // 如果是向后旋转，则索引减1
                if (forward == false)
                {
                    index--;
                }
                // 设置旋转为false
                rotate = false;
                break;

            }
            // 返回null，继续下一次循环
            yield return null;

        }
    }



}
